{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "## Сферическая линейная интерполяция двух кватернионов (SLERP)\n"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### Импорты"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from robobase.quaternion import Quaternion\n",
    "from robobase.quaternionfunctions import quatSlerp\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import AutoMinorLocator"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### Создание кватернионов"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [],
   "source": [
    "a1 = Quaternion(-0.4161, [0.3523, -0.3074, 0.7800])\n",
    "a2 = Quaternion.fromAngleAndVector(3.5112, [-0.1457, 0.5976, -0.7884])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### Расчет промежуточных кватернионов"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [],
   "source": [
    "quaternions = quatSlerp(a1, a2, 10)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "#### Отрисовка промежуточных кватернионов"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111, projection='3d')\n",
    "\n",
    "# Axis Lines\n",
    "lengthAxis = 1\n",
    "ax.plot([0, lengthAxis], [0, 0], [0, 0], color=\"red\")\n",
    "ax.plot([0, 0], [0, lengthAxis], [0, 0], color=\"green\")\n",
    "ax.plot([0, 0], [0, 0], [0, lengthAxis], color=\"blue\")\n",
    "\n",
    "for q in quaternions:\n",
    "    ax.plot([0, q.x + q.scalar], [0, q.y + q.scalar], [0, q.z + q.scalar], color=\"black\")\n",
    "    ax.scatter(q.x + q.scalar, q.y + q.scalar, q.z + q.scalar, c='blue', s=10)\n",
    "\n",
    "\n",
    "ax.view_init(elev=150., azim=55)\n",
    "ax.grid(False)\n",
    "ax.set_xlabel('$X$', fontsize=20)\n",
    "ax.set_ylabel('$Y$', fontsize=20)\n",
    "ax.set_zlabel('$Z$', fontsize=20)\n",
    "ax.xaxis.set_minor_locator(AutoMinorLocator())\n",
    "ax.yaxis.set_minor_locator(AutoMinorLocator())\n",
    "ax.tick_params(which='major', length=10, width=2)\n",
    "ax.tick_params(which='minor', length=5, width=1)\n",
    "plt.show()\n",
    "\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}